


import bpy
import random


import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类

类型枚举 = [
	("TYPE_单个", "单个", "", 0),
	("TYPE_区间", "区间", "", 1),
]






class C_SN_设置材质纹理节点图像(基类.C_SN_基类):
	bl_dname = 'bl_node_设置材质纹理节点图像'
	bl_label = '设置材质纹理节点图像'
	bl_icon = 'MATERIAL_DATA'

	#m_帧间隔 = bpy.props.IntProperty(default=1)
	def init(self, context):
		super(C_SN_设置材质纹理节点图像, self).f_init(context)
		self.inputs.new('C_NodeSocket_材质集', name='材质集')
		self.inputs.new('C_NodeSocket_文本', name='纹理节点名称')
		self.inputs.new('C_NodeSocket_图像集', name='纹理')
		
	def draw_buttons(self, context, layout):
		#layout.prop(self, "m_参考物体")
		#column.prop(self, "m_是否实例")
		#column.prop(self, 'm_物体name前缀')
		pass

	def f_update(self, 是否向下传递=False, input插座=None):
		材质集 = self.inputs['材质集'].f_getData()
		纹理节点名称 = self.inputs['纹理节点名称'].f_getData()
		纹理 = self.inputs['纹理'].f_getData()
	
		材质数量 = len(材质集)
		纹理数量 = len(纹理)

		是否独立纹理 = False
		if 纹理数量 > 1 :
			if 纹理数量 < 材质数量 :
				补充数量 = min(材质数量 - 纹理数量, 纹理数量)
				#print('A randoImage = ', 纹理, 补充数量, 材质数量 - 纹理数量, 材质数量, 纹理数量)
				randoImage = random.sample(纹理, 补充数量)
				#print('randoImage = ', randoImage)
				纹理.extend(randoImage)
				纹理数量 = len(纹理)
			elif 纹理数量 > 材质数量:
				纹理 = 纹理[:材质数量]

			是否独立纹理 = True

		index = 0
		#取得输入插座连接的输入插座数据
		for mat in 材质集:
			t = mat.node_tree
			if t != None :
				id = t.nodes.find(纹理节点名称)
				if id >= 0 :
					node = t.nodes[id]
					if node.type == 'TEX_IMAGE':
						node.image = 纹理[index]
						print('纹理[index] = ', index, 纹理[index])
					else:
						print('err ! : 节点类型不是纹理节点')
			
			if 是否独立纹理 :
				index += 1

		#print('材质集 = ', 材质集)
		super(C_SN_设置材质纹理节点图像, self).f_update(是否向下传递, input插座)


class C_NODE_MENU_设置材质纹理节点图(bpy.types.Operator):
	bl_idname = 'node.global_node_set_material_texture_node'
	bl_label = '设置材质纹理节点图'
	bl_options = {'REGISTER', 'UNDO'}

	def execute(operator, context):
		operator.use_transform = True
		bpy.ops.node.add_node(type='C_SN_设置材质纹理节点图像', use_transform=True)
		return {'FINISHED'}
		


classes = (
	C_SN_设置材质纹理节点图像,
	C_NODE_MENU_设置材质纹理节点图,
)

def register():
	for c in classes:
		bpy.utils.register_class(c)
		

def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)




